# -*- coding:UTF-8 -*-
# 高阶函数

# 一个函数作为另一个函数的返回值
# 一个函数作为另一个函数的参数
# 函数内部再定义一个函数
print('222')
# def foo():
#     print('foo')
#     return 'foo'

# def bar1():
#     print('bar')
#     return foo

# x = bar1()()
# print('x={}'.format(x))



# def outde():
#     m=100
#     def inner():
#         n=90
#         print('inner函数')
#     print('outrt函数')
#     return inner

# outde()


# def outer():
#   x=10 #定义一个局部变量x
#   def inner():
#     nonlocal x
#     y=x+1 #内部函数对外部函数进行了引用
#     x=11 #如果不写nonlocal的话，那么就是在inner内部创建了一个新变量
#     print(y)
    
#   return inner   #返回内部函数，不是函数的调用不能写()

# outer()()

# def funX():
#     x =5
#     def funY():
#         nonlocal x
#         x+=1
#         return x
#     return funY
# a = funX()
# print(a()) #6


import time

def time1(fn):
    def inner(s):
        star_time=time.time()
        x1=fn(s)  #调用fn 并执行
        end_time=time.time()
        print(end_time-star_time)
        return x1 #返回执行结果
    return inner
  
@time1  #外部函数的名字
def ys(a1):             #1 调用time1函数
    print('开始')      #2 把被装饰的函数ys传给fn
    time.sleep(3)
    print(a1)
    print('结束')
ys(5)